import http from './http.js'

/**
 * 商品实体类
 * 对应后端的Product模型
 */
class Product {
  constructor(data = {}) {
    this.id = data.id || 0
    this.product_id = data.product_id || ''
    this.name = data.name || ''
    this.price = data.price || 0.0
    this.description = data.description || ''
    this.image_url = data.image_url || ''
    this.created_at = data.created_at || ''
    this.updated_at = data.updated_at || ''
    this.is_deleted = data.is_deleted || false
  }
}

/**
 * 商品相关接口封装
 * 对应后端的product_controller.py接口
 */
export default {
  /**
   * 创建新商品
   * @param {Object} productData - 商品数据
   * @param {string} productData.name - 商品名称
   * @param {number} productData.price - 商品价格
   * @param {string} [productData.description] - 商品描述
   * @param {string} [productData.image_url] - 商品图片URL
   * @returns {Promise<Product>} 创建的商品对象
   */
  async create(productData) {
    const response = await http.post('/products', productData)
    return new Product(response.data)
  },

  /**
   * 获取所有商品列表
   * @param {Object} [query] - 查询参数
   * @param {number} [query.page=1] - 页码
   * @param {number} [query.limit=20] - 每页数量
   * @returns {Promise<Product[]>} 商品列表
   */
  async getAll(query = {}) {
    const response = await http.get('/products', {
      ...query,
      is_deleted: false
    })
    console.log(response)
    return response.data.list.map(item => new Product(item))
  },

    /**
   * 获取所有商品列表
   * @param {Object} [query] - 查询参数
   * @param {number} [query.page=1] - 页码
   * @param {number} [query.limit=20] - 每页数量
   * @returns {Promise<Product[]>} 商品列表
   */
    async getByPage(query = {}) {
      const response = await http.get('/products', query)
      console.log(response)
      return response.data
    },

  /**
   * 获取单个商品信息
   * @param {string} productId - 商品ID
   * @returns {Promise<Product>} 商品详细信息
   */
  async getById(storeId,productId) {
    const response = await http.get(`/products/${productId}`)
    return response.data
  },

  /**
   * 更新商品信息
   * @param {string} productId - 商品ID
   * @param {Object} updateData - 更新数据
   * @param {string} [updateData.name] - 商品名称
   * @param {number} [updateData.price] - 商品价格
   * @param {string} [updateData.description] - 商品描述
   * @param {string} [updateData.image_url] - 商品图片URL
   * @returns {Promise<Product>} 更新后的商品对象
   */
  async update(updateData) {
    const response = await http.put(`/products/${updateData.product_id}`, updateData)
    return response.data
  },
}